package Packtrait

import scala.collection.mutable.ArrayBuffer
import censo.Registro
import censo.Datos
import censo.Fuente

trait CriterioFiltroEmpresa {
  
	def pasarVentasAListaConCriterios(registros:ArrayBuffer[Registro]): ArrayBuffer[Double] = registros.map { a => a._montoTotalDeVentas }

  //
	def condicion(registro:Registro):Boolean
  
	def filtrarRegistrosXcondicion():ArrayBuffer[Registro]={
			Datos.registros.filter(r=> this.condicion(r))
	}
    def totalDeVentas():Double={
			pasarVentasAListaConCriterios(filtrarRegistrosXcondicion()).foldLeft(0.0)((contador, elemento) => contador + elemento)  
	}
 //////////
	def totalDeGanancias(): Double = this.pasarGananciasALista.foldLeft(0.0)((contador, elemento) => contador + elemento)
	def pasarGananciasALista: ArrayBuffer[Double] = this.filtrarRegistrosXcondicion map { a => a._montoTotalDeGanancias }
///////////
	def montoDeGananciasSuperiorA(valorAComparar:Double):Int= 
		  (this.filtrarRegistrosXcondicion.filter(r => r.montoTotalDeGanancias > valorAComparar)).size
//////////		  
	//e) La cantidad de registros cuya tasa de ganancia supere un parametro
	def tazaDeGananciasSuperiorA(valorAComparar:Double):Int= 
		  (this.filtrarRegistrosXcondicion.filter(r => r.tasaDeGanancia > valorAComparar)).size  
 //////////
	def nombreDeEmpresasQueSuperan(valorAComparar: Double): ArrayBuffer[String] = 
    	this.filtrarRegistrosXcondicion.
        	filter(r => r.nombreEmpresasConVentasMayorA(valorAComparar) && r.soyRegistroDeEmpresa).
        	map { r => r.nombreDeLaEmpresa }

	object Funciones{
  
		def valorXMontoDeGanancia(registro:Registro):Double= registro.montoTotalDeGanancias   
		def valorXTotalDeVentas(registro:Registro):Double=registro.montoTotalDeVentas
		def valorXTasaDeGanancias(registro:Registro):Double=registro.tasaDeGanancia
  

}

	
	
	}	